﻿using System;
using System.Windows.Forms;
using AutomatedDecisionMaking.Class;
using AutomatedDecisionMaking.Class.Algorithms;

namespace AutomatedDecisionMaking.GUI.MiniMaxWindow
{
    public partial class FrmMiniMax : Form
    {
        private readonly MiniMaxAlgorithm _mAlgorithm; /// Algorytm realizujący podejmowanie decyzji

        /// <summary>
        /// Konstruktor okna przedstawiającego wyniki działania algorytmu MiniMax
        /// </summary>
        /// <param name="decisionMatrix">Macierz decyzji</param>
        public FrmMiniMax(DecisionMatrix decisionMatrix)
        {
            InitializeComponent();
            _mAlgorithm = new MiniMaxAlgorithm(decisionMatrix);
        }

        /// <summary>
        /// Metoda prywatna przygotowująca okno do reprezentacji wyników.
        /// Ładuje wyniki działania algorytmu w odpowiednie kontrolki.
        /// </summary>
        /// <param name="sender">Obiekt wywołujcy zdarzenie</param>
        /// <param name="e">Zdarzenie</param>
        private void FrmMiniMax_Load(object sender, EventArgs e)
        {
            _mAlgorithm.CalculateSolution();
            var minValue = _mAlgorithm.GetMinValuesStr();
            var maxiMaxValue = _mAlgorithm.GetMiniMaxValue();
            var decision = _mAlgorithm.GetDecision();

            foreach (string str in minValue)
                ListBox_MinVal.Items.Add(str);

            TextBox_MiniMaxVal.Text = maxiMaxValue.ToString();

            Label_Decision.Text = decision;
        }
    }
}
